#include <stdio.h>
#include <stdlib.h>
#include "queue.h"

typedef struct simstack_st {
	queue_t *qa;
	queue_t *qb;

	// 0用qa接收新元素
	// 1用qb接收新元素
	int alt;
} simstack_t;

int simstack_init(simstack_t **s)
{
	*s = malloc(sizeof (simstack_t));

	(*s)->alt = 0; // 默认用qa

	queue_init(&((*s)->qa), sizeof (char), 100);
	queue_init(&((*s)->qb), sizeof (char), 100);
}

int simstack_push(simstack_t *s, const void *data)
{
	if (s->alt) { // 入队qa
		queue_enq(s->qa, data);
	} else { // 入队qb
		queue_enq(s->qb, data);
	}
}

int simstack_pop(simstack_t *s, void *data)
{
	if (s->alt) { // 当前在用qa
		while (queue_count(s->qa) > 1) {
			queue_deq(s->qa, data);
			queue_enq(s->qb, data);
		}
		queue_deq(s->qa, data);
		s->alt = 0;
	} else { // 当前在用qb
		while (queue_count(s->qb) > 1) {
			queue_deq(s->qb, data);
			queue_enq(s->qa, data);
		}
		queue_deq(s->qb, data);
		s->alt = 1;
	}

	return 0;
}

int main()
{
	int i;
	char c;
	simstack_t *stack;

	simstack_init(&stack);

	// 入栈 'A' - 'J' 10个字符
	for (i = 65; i < 75; i++) {
		c = (char) i;
		simstack_push(stack, &c);
		printf("Push %c\n", c);
	}

	// 出栈5个字符
	for (i = 0; i < 5; i++) {
		simstack_pop(stack, &c);
		printf("Pop %c\n", c);
	}
	
	// 入栈 '0' - '9' 10个字符
	for (i = 48; i < 58; i++) {
		c = (char) i;
		simstack_push(stack, &c);
		printf("Push %c\n", c);
	}

	// 出栈15个字符
	for (i = 0; i < 15; i++) {
		simstack_pop(stack, &c);
		printf("Pop %c\n", c);
	}

	return 0;
}
